You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
3.3 KiB
94 lines
3.3 KiB
<script lang="ts" context="module">
|
|
import type { Load } from "@sveltejs/kit/types/internal";
|
|
|
|
import { sl3 } from "$lib/clients/sl3";
|
|
import parseInterval, { datesOf } from "$lib/utils/timeinterval";
|
|
import type Item from "$lib/models/item";
|
|
import type { ItemFilter, ItemGroup } from "$lib/models/item";
|
|
|
|
export const load: Load = async({ fetch, params, session, stuff }) => {
|
|
const scopeId = parseInt(params.scope.split("-")[0]);
|
|
|
|
const interval = parseInterval(params.interval, new Date());
|
|
const filter = {
|
|
createdTime: interval,
|
|
acquiredTime: interval,
|
|
scheduledDate: datesOf(interval),
|
|
};
|
|
const {items, groups} = await sl3(fetch, stuff.idToken).listItems(scopeId, filter, true, session.groupOptions);
|
|
|
|
return {
|
|
stuff: { title: "History" },
|
|
props: {
|
|
items, groups, filter,
|
|
intervalString: params.interval,
|
|
},
|
|
};
|
|
}
|
|
</script>
|
|
|
|
<script lang="ts">
|
|
import { goto } from "$app/navigation";
|
|
import { session } from "$app/stores";
|
|
import { browser } from "$app/env";
|
|
import Main from "$lib/components/layout/Main.svelte";
|
|
import { getScopeContext } from "$lib/components/contexts/ScopeContext.svelte";
|
|
import DeletionModal from "$lib/modals/DeletionModal.svelte";
|
|
import ItemAcquireModal from "$lib/modals/ItemAcquireModal.svelte";
|
|
import ItemCreateModal from "$lib/modals/ItemCreateModal.svelte";
|
|
import HistorySelector from "$lib/components/common/HistorySelector.svelte";
|
|
import ItemListContext from "$lib/components/contexts/ItemListContext.svelte";
|
|
import HistoryGroupList from "$lib/components/history/HistoryGroupList.svelte";
|
|
import ToggleIcon from "$lib/components/history/ToggleIcon.svelte";
|
|
|
|
export let intervalString: string
|
|
export let items: Item[]
|
|
export let groups: ItemGroup[]
|
|
export let filter: ItemFilter;
|
|
|
|
const {lastHistoryRange} = getScopeContext();
|
|
|
|
function changeInterval(e: Event) {
|
|
const target = e.target as HTMLSelectElement;
|
|
|
|
lastHistoryRange.set(target.value);
|
|
|
|
goto(`./${target.value}`, {replaceState: true});
|
|
}
|
|
|
|
function triggerReload() {
|
|
goto(`./${intervalString}`, {replaceState: true});
|
|
}
|
|
|
|
$: {
|
|
if (browser) {
|
|
if ($session.groupOptions == null) {
|
|
try {
|
|
$session.groupOptions = JSON.parse(localStorage.getItem("sl3.history.group_options")||"{}");
|
|
triggerReload();
|
|
} catch(_) {
|
|
$session.groupOptions = {};
|
|
}
|
|
} else {
|
|
localStorage.setItem("sl3.history.group_options", JSON.stringify($session.groupOptions));
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<ItemListContext filter={filter} groups={groups} items={items}>
|
|
<Main big>
|
|
<HistorySelector value={intervalString} on:change={changeInterval} >
|
|
{#if $session.groupOptions != null}
|
|
<ToggleIcon inverse name="lightbulb" bind:value={$session.groupOptions.hideCreated} on:click={triggerReload} />
|
|
<ToggleIcon inverse name="check_slot" bind:value={$session.groupOptions.hideAcquired} on:click={triggerReload} />
|
|
<ToggleIcon inverse name="calendar" bind:value={$session.groupOptions.hideScheduled} on:click={triggerReload} />
|
|
{/if}
|
|
</HistorySelector>
|
|
<HistoryGroupList intervalString={intervalString} />
|
|
</Main>
|
|
|
|
<ItemCreateModal />
|
|
<ItemAcquireModal />
|
|
<DeletionModal />
|
|
</ItemListContext>
|